package com.myaxuan.util.designpattern.producerandconsumer;

import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 生产者
 * Created by pc255 on 2018/5/7.
 */
public class Producer implements Runnable{
	private volatile boolean isRunning = true;
	private BlockingQueue<PCData> queue;// 内存缓冲区
	private static AtomicInteger count = new AtomicInteger();// 总数 原子操作
	private static final int SLEEPTIME = 1000;

	public Producer(BlockingQueue<PCData> queue) {
		this.queue = queue;
	}

	@Override
	public void run() {
		PCData data = null;
		Random r = new Random();
		System.out.println("start producting id:" + Thread.currentThread().getId());
		try {
			while (isRunning) {
				Thread.sleep(r.nextInt(SLEEPTIME));
				data = new PCData(count.incrementAndGet());
//				System.out.println(data + " 加入队列");
				System.out.println("编号"+Thread.currentThread().getId()+"号生产数字"+data.getData()+",并加入队列");
				if (!queue.offer(data, 2, TimeUnit.SECONDS)) {
					System.err.println(" 加入队列失败");
				}
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
			Thread.currentThread().interrupt();
		}

	}

	public void stop() {
		System.out.println("生产者"+Thread.currentThread().getId()+"号已停止");
		isRunning = false;
	}
}
